// 由于首页面板数据加载都需要实现懒数据加载，所以封装一个钩子函数，得到数据。

import { useIntersectionObserver, useIntervalFn } from '@vueuse/core'
import { onUnmounted, ref } from 'vue'
import dayjs from 'dayjs'

/**
 * 数据懒加载函数
 * @param target {Element} -Dom对象
 * @param apiFn {Function} API函数
 */
export const useLazyData = (apiFn) => {
  const target = ref(null)
  const result = ref([])
  // 停止观察
  const { stop } = useIntersectionObserver(
    // target 是观察的目标dom容器，必须是dom容器，而且是vue3.0方式绑定的dom对象
    target,
    // isIntersecting 是否进入可视区域，true是进入 false是移出
    // observerElement 被观察的dom
    ([{ isIntersecting }], observerElement) => {
      // 在此处可根据isIntersecting来判断，然后做业务
      if (isIntersecting) {
        // 如果进入了可视区
        stop()
        // 调用API函数获取数据
        apiFn().then(data => {
          result.value = data.result
        })
      }
    },
    //  配置属性
    {
      // 门槛，只要相交面积大于0就认为是可视的
      threshold: 0
    }
  )
  return {
    target,
    result
  }
}

/**
 *
 * @param countdown
 * @returns {{resume, timeText: *}}
 */
export const usePayTime = () => {
  // 倒计时秒数
  const time = ref(0)
  // 倒计时文字
  const timeText = ref('')
  // 倒计时逻辑
  const {
    pause,
    resume
  } = useIntervalFn(() => {
    time.value--
    timeText.value = dayjs.unix(time.value).format('mm分ss秒')
    if (time.value < 0) {
      pause()
    }
  }, 1000, false)
  // 组件销毁时清空定时器
  onUnmounted(() => {
    pause()
  })
  // 开启定时器, countdown倒计时时间
  const start = (countdown) => {
    time.value = countdown
    timeText.value = dayjs.unix(time.value).format('mm分ss秒')
    resume()
  }
  return {
    timeText,
    time,
    start
  }
}
